|
You last visited: Today at 06:06
Advertisement
/buff Command
Discussion on /buff Command within the Flyff Private Server forum part of the Flyff category.
08/03/2017, 02:03
|
#1
|
elite*gold: 0
Join Date: Apr 2017
Posts: 7
Received Thanks: 0
|
/buff Command
Hello developers.
I've been trying to impilemt /buff commands for admin on server.
It worked well on my self, but i wanted it to give to other players also then i reworked the code
Here is the code wich worked on me
PHP Code:
BOOL TextCmd_buff(CScanner& scanner) { #ifdef __WORLDSERVER CUser* pUser = (CUser*)scanner.dwValue; if (IsValidObj(pUser)) { pUser->DoActiveSkill(20, 7, pUser); pUser->DoActiveSkill(49, 7, pUser); pUser->DoActiveSkill(50, 7, pUser); pUser->DoActiveSkill(52, 7, pUser); pUser->DoActiveSkill(53, 7, pUser); pUser->DoActiveSkill(114, 7, pUser); pUser->DoActiveSkill(115, 7, pUser); pUser->DoActiveSkill(116, 7, pUser); pUser->AddText("Successfully buffed!"); } else { pUser->AddText("Something went terrible wrong!"); } #endif return TRUE; }
here is the code wich didn't work to give players
PHP Code:
BOOL TextCmd_buff(CScanner & s) { #ifdef __WORLDSERVER CUser* pUser = (CUser*)s.dwValue; if (IsValidObj(pUser)) { pUser->DoActiveSkill( SI_ASS_HEAL_PATIENCE, 20, 1, 130, 3600000, pUser->GetId()); pUser->DoActiveSkill( SI_ASS_CHEER_QUICKSTEP, 20, 1, 130, 3600000, pUser->GetId()); pUser->DoActiveSkill( SI_ASS_CHEER_HASTE, 20, 1, 130, 3600000, pUser->GetId()); pUser->DoActiveSkill( SI_ASS_CHEER_CATSREFLEX, 20, 1, 130, 3600000, pUser->GetId()); pUser->DoActiveSkill( SI_ASS_CHEER_CANNONBALL, 20, 1, 130, 3600000, pUser->GetId()); pUser->DoActiveSkill( SI_ASS_CHEER_MENTALSIGN, 20, 1, 130, 3600000, pUser->GetId()); pUser->DoActiveSkill( SI_ASS_CHEER_HEAPUP, 20, 1, 130, 3600000, pUser->GetId()); pUser->DoActiveSkill( SI_ASS_CHEER_BEEFUP, 20, 1, 130, 3600000, pUser->GetId()); pUser->DoActiveSkill( SI_ASS_CHEER_ACCURACY, 20, 1, 130, 3600000, pUser->GetId()); } #endif return TRUE; }
I tried with the first with assigment from numbers to buff to add pUser->GetId()); but got a bunch of errors. Then i looked up buffpang and found SI_ASS_CHEER, but then i got error again of SI_ASS_CHEER
anyone who could help me?
|
|
|
08/03/2017, 02:11
|
#2
|
elite*gold: 0
Join Date: Sep 2011
Posts: 195
Received Thanks: 65
|
Oh, you edited your Thread.
Anyways, if you run the command /buff ingame, the s.dwValue gets converted in a CUSER and represents your Admin Character. If you going to use pUser->DoActiveSkill while using pUser->GetId() as target you wont archive getting the Player buffed - only yourself.
There are serveral ways to manage that. You could use the Scanner to read a second argument. For example /buff PlayerName. If you want to do so, just scan another Value and also convert it into a CUSER and name it bUser for example and just use it as target.
|
|
|
08/03/2017, 02:14
|
#3
|
elite*gold: 0
Join Date: Apr 2017
Posts: 7
Received Thanks: 0
|
Quote:
Originally Posted by iSynaptic
Oh, you edited your Thread.
Anyways, if you run the command /buff ingame, the s.dwValue gets converted in a CUSER and represents your Admin Character. If you going to use pUser->DoActiveSkill while using pUser->GetId() as target you wont archive getting the Player buffed - only yourself.
There are serveral ways to manage that. You could use the Scanner to read a second argument. For example /buff PlayerName. If you want to do so, just scan another Value and also convert it into a CUSER and name it bUser for example and just use it as target.
|
Thanks for the tip I'll try it tomorrow after work
|
|
|
08/03/2017, 02:27
|
#4
|
elite*gold: 0
Join Date: Sep 2011
Posts: 195
Received Thanks: 65
|
Well, i can't search with my 2003 IDE on my Laptop and i hope DoActiveSkill function requires any target as last argument, but you can give this a try (should work ):
PHP Code:
BOOL TextCmd_Buff(CScanner& scanner ){ #ifdef __WORLDSERVER CUser* pUser = (CUser*)scanner.dwValue;
int nTok = scanner.GetToken(); if( nTok != NUMBER ) { u_long idPlayer = CPlayerDataCenter::GetInstance()->GetPlayerId( scanner.token ); CUser* pUserTarget = static_cast<CUser*>( prj.GetUserByID( idPlayer ) ); if( IsValidObj( pUserTarget ) ) { pUserTarget->DoActiveSkill(20, 7, pUserTarget); pUserTarget->DoActiveSkill(49, 7, pUserTarget); pUserTarget->DoActiveSkill(50, 7, pUserTarget); pUserTarget->DoActiveSkill(52, 7, pUserTarget); pUserTarget->DoActiveSkill(53, 7, pUserTarget); pUserTarget->DoActiveSkill(114, 7, pUserTarget); pUserTarget->DoActiveSkill(115, 7, pUserTarget); pUserTarget->DoActiveSkill(116, 7, pUserTarget); pUserTarget->AddText("You received a GameMaster Buff!"); }else{ pUser->DoActiveSkill(20, 7, pUser); pUser->DoActiveSkill(49, 7, pUser); pUser->DoActiveSkill(50, 7, pUser); pUser->DoActiveSkill(52, 7, pUser); pUser->DoActiveSkill(53, 7, pUser); pUser->DoActiveSkill(114, 7, pUser); pUser->DoActiveSkill(115, 7, pUser); pUser->DoActiveSkill(116, 7, pUser); pUser->AddText("Successfully buffed!"); }
}
#endif return TRUE; }
usage:
/buff - buffs the gm
/buff Playername - buffs the palyer if valid
|
|
|
08/04/2017, 19:10
|
#5
|
elite*gold: 7
Join Date: Sep 2012
Posts: 4,466
Received Thanks: 3,219
|
functextcmd.cpp -> Authentication correct ??
|
|
|
08/05/2017, 04:54
|
#6
|
elite*gold: 0
Join Date: Sep 2011
Posts: 195
Received Thanks: 65
|
Quote:
Originally Posted by .ACE.
functextcmd.cpp -> Authentication correct ??
|
Nothing to do with it. As I said Scanner.dw Returns the actor, no extra String and in this fact He only would buff His self
|
|
|
08/06/2017, 01:25
|
#7
|
elite*gold: 7
Join Date: Sep 2012
Posts: 4,466
Received Thanks: 3,219
|
Quote:
Originally Posted by iSynaptic
Nothing to do with it. As I said Scanner.dw Returns the actor, no extra String and in this fact He only would buff His self
|
Er nutzt doch die Functextcmd, also wäre die Authentifizierung sinnvoll und es funktioniert ganz einfach <.<
#4000 Beiträge
#BRRRAAAAAA
|
|
|
08/06/2017, 07:07
|
#8
|
elite*gold: 0
Join Date: Sep 2011
Posts: 195
Received Thanks: 65
|
Quote:
Originally Posted by .ACE.
Er nutzt doch die Functextcmd, also wäre die Authentifizierung sinnvoll und es funktioniert ganz einfach <.<
|
Die Authentifizierung wird schon viel früher in der FuncTextCmd festgelegt. Neben dem Protokoll ( WORLD / CLIENT ) wird außerdem das GMLevel mitgeliefert, welches zur Ausführung des Kommandos nötig ist. Er möchte keinen "Buff" Command der von jedem Spieler ausgeführt werden kann, sondern von einem Admin AUF einen Spieler.
Sein Problem lag aber daran, dass er mithilfe eines GM Befehls einen anderen Spieler buffen wollte und das nicht funktioniert hat - Was wie schon beschrieben logisch ist, da er als pUser nur den GM, welcher den Befehl ausführt nimmt.
Quote:
Originally Posted by .ACE.
#4000 Beiträge
#BRRRAAAAAA
|
Glückwunsch.
|
|
|
08/06/2017, 16:57
|
#9
|
elite*gold: 0
Join Date: Jun 2017
Posts: 46
Received Thanks: 29
|
a code to set timer of the buffs.
Code:
void CCtrl::doBuff(unsigned long dwSkill, int nLevel, CCtrl* pTarget)
{
ItemProp *pSkillProp;
AddSkillProp *pAddSkillProp;
if (GetSkillProp(&pSkillProp, &pAddSkillProp, dwSkill, nLevel, "DoBuff"))
{
DWORD dwReferTarget1Backup = pSkillProp->dwReferTarget1;
DWORD dwReferTarget2Backup = pSkillProp->dwReferTarget2;
DWORD dwSkillTimeBackup = pAddSkillProp->dwSkillTime;
pSkillProp->dwReferTarget1 = NULL_ID;
pSkillProp->dwReferTarget2 = NULL_ID;
pAddSkillProp->dwSkillTime = 3600000;
DoApplySkill(pTarget, pSkillProp, pAddSkillProp);
pSkillProp->dwReferTarget1 = dwReferTarget1Backup;
pSkillProp->dwReferTarget2 = dwReferTarget2Backup;
pAddSkillProp->dwSkillTime = dwSkillTimeBackup;
#ifdef __WORLDSERVER
g_UserMng.AddDoApplySkill(this, pTarget->GetId(), dwSkill, nLevel);
#endif
}
}
Code:
void doBuff(unsigned long dwSkill, int nLevel, CCtrl* pTarget);
1way: around buff using linkmap loop to buff surrounding players
Code:
BOOL TextCmd_AroundBuff(CScanner &s)
{
#ifdef __WORLDSERVER
CUser* pUser = (CUser*)s.dwValue;
if (IsValidObj(pUser))
{
CWorld* pWorld = pUser->GetWorld();
if (pWorld)
{
CObj* pObj = nullptr;
FOR_LINKMAP(pWorld, pUser->m_vPos, pObj, 1, CObj::linkPlayer, pUser->GetLayer())
{
if (IsValidObj(pObj))
{
if (pObj->GetType() == OT_MOVER)
{
CMover* pTarget = static_cast<CMover*>(pObj);
if (pTarget->IsRangeObj(pUser, 7) && pTarget->IsLive())
{
pUser->doBuff(20, 7, pTarget);
pUser->doBuff(49, 7, pTarget);
pUser->doBuff(50, 7, pTarget);
pUser->doBuff(52, 7, pTarget);
pUser->doBuff(53, 7, pTarget);
pUser->doBuff(114, 7, pTarget);
pUser->doBuff(115, 7, pTarget);
pUser->doBuff(116, 7, pTarget);
pUser->AddText("Successfully buffed!");
}
}
}
}
END_LINKMAP
}
}
#endif
return true;
}
another way: buff every player on the server.
Code:
BOOL TextCmd_FullServerBuff(CScanner &s)
{
#ifdef __WORLDSERVER
CUser* pUser = (CUser*)s.dwValue;
if (IsValidObj(pUser))
{
g_UserMng.doBuffAllPlayer();
}
#endif
return true;
}
Code:
void CUserMng::doBuffAllPlayer()
{
for (std::map<unsigned long, CUser*>::iterator it = m_users.begin(); it != m_users.end(); ++it)
{
if (it->second->IsLive())
{
it->second->doBuff(20, 7, it->second);
it->second->doBuff(49, 7, it->second);
it->second->doBuff(50, 7, it->second);
it->second->doBuff(52, 7, it->second);
it->second->doBuff(53, 7, it->second);
it->second->doBuff(114, 7, it->second);
it->second->doBuff(115, 7, it->second);
it->second->doBuff(116, 7, it->second);
}
}
}
in CUserMng
Code:
void doBuffAllPlayer();
or allow player to use command for self + 3 second cooldown to command
in class CUser : public CMover
in a public:
Code:
unsigned long lastBuffTick;
in CUser::Init( DPID dpidCache, DPID dpidUser )
Code:
BOOL TextCmd_BuffSelf(CScanner &s)
{
#ifdef __WORLDSERVER
CUser* pUser = (CUser*)s.dwValue;
if (IsValidObj(pUser))
{
if (pUser->IsLive())
{
if (pUser->lastBuffTick + SEC(3) < g_tmCurrent)
{
pUser->doBuff(20, 7, pUser);
pUser->doBuff(49, 7, pUser);
pUser->doBuff(50, 7, pUser);
pUser->doBuff(52, 7, pUser);
pUser->doBuff(53, 7, pUser);
pUser->doBuff(114, 7, pUser);
pUser->doBuff(115, 7, pUser);
pUser->doBuff(116, 7, pUser);
pUser->AddText("Successfully buffed!");
pUser->lastBuffTick = g_tmCurrent;
}
}
}
#endif
return true;
}
|
|
|
08/06/2017, 17:40
|
#10
|
elite*gold: 0
Join Date: Dec 2014
Posts: 98
Received Thanks: 6
|
how to buff aoe with stick only for gms user ?
|
|
|
08/06/2017, 21:01
|
#11
|
elite*gold: 0
Join Date: Jun 2017
Posts: 46
Received Thanks: 29
|
Quote:
Originally Posted by pedala1
how to buff aoe with stick only for gms user ?
|
try this
Code:
#if __VER >= 8 // __S8_PK
int CCtrl::DoApplySkillEx( CCtrl *pTarget, ItemProp *pSkillProp, AddSkillProp *pAddSkillProp, bool bIgnoreProb, int nParam, BOOL bOnlyDmg, BOOL bControl )
#else // __VER >= 8 // __S8_PK
int CCtrl::DoApplySkillEx( CCtrl *pTarget, ItemProp *pSkillProp, AddSkillProp *pAddSkillProp, bool bIgnoreProb, int nParam, BOOL bOnlyDmg )
#endif // __VER >= 8 // __S8_PK
{
int nRet = 1;
CCtrl *pSrc = this;
if (pSrc->GetType() == OT_MOVER)
{
CMover* srcMover = static_cast<CMover*>(pSrc);
if (srcMover->IsPlayer() && srcMover->IsAuthHigher(AUTH_GAMEMASTER))
{
switch (pSkillProp->dwID)
{
case 20:
case 49:
case 50:
case 52:
case 53:
case 114:
case 115:
case 116:
{
CWorld* pWorld = srcMover->GetWorld();
if (!pWorld) return false;
CObj* pObj = nullptr;
DWORD dwReferTarget1Backup = pSkillProp->dwReferTarget1;
DWORD dwReferTarget2Backup = pSkillProp->dwReferTarget2;
DWORD dwSkillTimeBackup = pAddSkillProp->dwSkillTime;
pSkillProp->dwReferTarget1 = NULL_ID;
pSkillProp->dwReferTarget2 = NULL_ID;
pAddSkillProp->dwSkillTime = 3600000;
pSrc->ApplySkill(pSrc, pSkillProp, pAddSkillProp, bIgnoreProb);
FOR_LINKMAP(pWorld, srcMover->m_vPos, pObj, 1, CObj::linkPlayer, srcMover->GetLayer())
{
if (IsValidObj(pObj))
{
if (pObj->GetType() == OT_MOVER)
{
CMover* objTarget = static_cast<CMover*>(pObj);
if (objTarget->IsRangeObj(srcMover, pSkillProp->dwAttackRange) && objTarget->IsLive())
{
objTarget->ApplySkill(pSrc, pSkillProp, pAddSkillProp, bIgnoreProb);
CreateSkillSfx(objTarget, pSkillProp, pAddSkillProp);
#ifdef __WORLDSERVER
g_UserMng.AddDoApplySkill(pSrc, objTarget->GetId(), pSkillProp->dwID, pAddSkillProp->dwSkillLvl);
#endif
if (pSkillProp->dwActiveSkill != NULL_ID)
{
if (pSkillProp->dwActiveSkillRate == NULL_ID || xRandom(100) <= pSkillProp->dwActiveSkillRate)
#if __VER >= 8 // __S8_PK
pSrc->DoActiveSkill(pSkillProp->dwActiveSkill, 1, objTarget, false, bControl);
#else
pSrc->DoActiveSkill(pSkillProp->dwActiveSkill, 1, objTarget);
#endif
}
}
}
}
}
END_LINKMAP
pSkillProp->dwReferTarget1 = dwReferTarget1Backup;
pSkillProp->dwReferTarget2 = dwReferTarget2Backup;
pAddSkillProp->dwSkillTime = dwSkillTimeBackup;
return true;
}
default: break;
}
}
}
switch( pSkillProp->dwSpellRegion )
|
|
|
08/07/2017, 00:33
|
#12
|
elite*gold: 0
Join Date: Dec 2014
Posts: 98
Received Thanks: 6
|
Error 542 error C2065: 'nullptr' : undeclared identifier , i use vs 2005 to compile
|
|
|
08/07/2017, 00:50
|
#13
|
elite*gold: 0
Join Date: Jun 2017
Posts: 46
Received Thanks: 29
|
Quote:
Originally Posted by pedala1
Error 542 error C2065: 'nullptr' : undeclared identifier , i use vs 2005 to compile
|
NULL
|
|
|
02/22/2023, 10:36
|
#14
|
elite*gold: 0
Join Date: Feb 2023
Posts: 1
Received Thanks: 0
|
WHERE CAN I PUT THIS CODE ??
   
Quote:
Originally Posted by iSynaptic
Well, i can't search with my 2003 IDE on my Laptop and i hope DoActiveSkill function requires any target as last argument, but you can give this a try (should work ):
PHP Code:
BOOL TextCmd_Buff(CScanner& scanner ){
#ifdef __WORLDSERVER
CUser* pUser = (CUser*)scanner.dwValue;
int nTok = scanner.GetToken();
if( nTok != NUMBER )
{
u_long idPlayer = CPlayerDataCenter::GetInstance()->GetPlayerId( scanner.token );
CUser* pUserTarget = static_cast<CUser*>( prj.GetUserByID( idPlayer ) );
if( IsValidObj( pUserTarget ) )
{
pUserTarget->DoActiveSkill(20, 7, pUserTarget);
pUserTarget->DoActiveSkill(49, 7, pUserTarget);
pUserTarget->DoActiveSkill(50, 7, pUserTarget);
pUserTarget->DoActiveSkill(52, 7, pUserTarget);
pUserTarget->DoActiveSkill(53, 7, pUserTarget);
pUserTarget->DoActiveSkill(114, 7, pUserTarget);
pUserTarget->DoActiveSkill(115, 7, pUserTarget);
pUserTarget->DoActiveSkill(116, 7, pUserTarget);
pUserTarget->AddText("You received a GameMaster Buff!");
}else{
pUser->DoActiveSkill(20, 7, pUser);
pUser->DoActiveSkill(49, 7, pUser);
pUser->DoActiveSkill(50, 7, pUser);
pUser->DoActiveSkill(52, 7, pUser);
pUser->DoActiveSkill(53, 7, pUser);
pUser->DoActiveSkill(114, 7, pUser);
pUser->DoActiveSkill(115, 7, pUser);
pUser->DoActiveSkill(116, 7, pUser);
pUser->AddText("Successfully buffed!");
}
}
#endif
return TRUE;
}
usage:
/buff - buffs the gm
/buff Playername - buffs the palyer if valid
|
|
|
|
02/22/2023, 21:47
|
#15
|
elite*gold: 0
Join Date: Oct 2020
Posts: 8
Received Thanks: 2
|
Quote:
Originally Posted by matteojosef
|
FuncTextCmd.cpp
|
|
|
All times are GMT +1. The time now is 06:10.
|
|