re: [Release] IGCN Season 9.5 (src-x9.5 9.5.1.15) SRC (April/2016)
Quote:
Originally Posted by
MaxMuON
Hi guys,
Who can help me with IGC.dll and main.exe that don`t have chat bug ?
I see this one have only 200kb and other from another server s9.5, fixed have 7820kb, but the problem is that i get d/c every 3 min with the fixed one ... So who can help me ? Thank you !
Did you disable the checkdllversion on server side?
Enviado desde mi SM-G531M mediante Tapatalk
re: [Release] IGCN Season 9.5 (src-x9.5 9.5.1.15) SRC (April/2016)
Its not that.. Not the server kick me, the client does ... the problem is from igc.dll, it have some kind of protection ...
[00:46:21] (12112)(test)(test) Character closed[00:46:21] (12112)Logout Request : test [173.239.223.11]
its like i log out
re: [Release] IGCN Season 9.5 (src-x9.5 9.5.1.15) SRC (April/2016)
after entering the illusion event, the ticket does not disappear, how to fix ? help please
re: [Release] IGCN Season 9.5 (src-x9.5 9.5.1.15) SRC (April/2016)
Quote:
Originally Posted by
fox333
Don't shut down your server that way.... Do it properly and it won't happen.
Disconnect all players 1st using the commands in the game server.
Reconnect feature will properly function if the game server stops unexpectedly, and base from my experience it is reconnecting properly and not doing that duplicate thing.
re: [Release] IGCN Season 9.5 (src-x9.5 9.5.1.15) SRC (April/2016)
Hello guyz, in these files what about agility bug for all classes? Gen system is working fine?
re: [Release] IGCN Season 9.5 (src-x9.5 9.5.1.15) SRC (April/2016)
Someone could add to this muserver a custum that has in Zteam that I find very interesting to bonus players in events.
it's the MonsterSpawner.xml
in Red is define an item that when it is dropped will create a Temporary Spot
in Yellow is defined the monster that will spawn and also the quantity and the duration time.
in Green it is defined if the spot created will be private or not (if it is deprived only those who dropped the item can attack the monsters.
in Blue is defined if the party of whom the item drops will be able to attack.
in Orange is set if the guild of who drops the item will be able to attack.
<monsterspawner>
<!-- example, elite yeti -->
<item type="14" index="300">
<spawn monster="20" count="30" duration="60" />
<!-- rules for use this spot (false: any user can attack, true: only owner & by rules) -->
<private active="true">
<party>true</party>
<guild>false</guild>
</private>
</item>
<!-- example, mutant -->
<item type="14" index="301">
<spawn monster="62" count="30" duration="60" />
<!-- rules for use this spot (false: any user can attack, true: only owner & by rules) -->
<private active="true">
<party>true</party>
<guild>false</guild>
</private>
</item>
<!-- example, fire golem -->
<item type="14" index="302">
<spawn monster="291" count="30" duration="60" />
<!-- rules for use this spot (false: any user can attack, true: only owner & by rules) -->
<private active="true">
<party>true</party>
<guild>false</guild>
</private>
</item>
</monsterspawner>
aqui fica os código que eu pegue da source da Zteam
MonsterSpawner.cpp
PHP Code:
#include "stdafx.h"
#include "MonsterSpawner.h"
#include "GameMain.h"
#include "..\pugixml\pugixml.hpp"
MonsterSpawnerMng* MonsterSpawnerMng::m_Instance = NULL;
MonsterSpawnerMng::MonsterSpawnerMng() {
m_WorkPool.clear();
//m_ItemData.clear();
}
MonsterSpawnerMng::~MonsterSpawnerMng() {
// lifetime instance...
}
void MonsterSpawnerMng::Load() {
m_Loaded = false;
Init();
Read(gDirPath.GetNewPath(FILE_CUSTOM_MONSTERSPAWNER));
}
void MonsterSpawnerMng::Init() {
m_ItemData.clear();
}
void MonsterSpawnerMng::Read(const char *File) {
using namespace pugi;
xml_document Document;
xml_parse_result Result = Document.load_file(File);
if (Result.status != status_ok) {
MsgBox("[MonsterSpawnerMng] File %s not found!", File);
return;
}
xml_node nodeMain = Document.child("monsterspawner");
for (xml_node nodeIt = nodeMain.child("item"); nodeIt; nodeIt = nodeIt.next_sibling()) {
MonsterSpawnerItemInfo newItem = { 0 };
newItem.itemCategory = nodeIt.attribute("type").as_int(-1);
newItem.itemIndex = nodeIt.attribute("index").as_int(-1);
newItem.spawnMonsterId = nodeIt.child("spawn").attribute("monster").as_int(-1);
newItem.spawnMonsterCount = nodeIt.child("spawn").attribute("count").as_int(-1);
newItem.spawnDuration = nodeIt.child("spawn").attribute("duration").as_int(-1);
newItem.isPrivate = nodeIt.child("private").attribute("active").as_bool();
newItem.isPrivateParty = nodeIt.child("private").child("party").text().as_bool();
newItem.isPrivateGuild = nodeIt.child("private").child("guild").text().as_bool();
m_ItemData.push_back(newItem);
}
LogAddTD("[MonsterSpawnerMng] loaded %d node(s)", m_ItemData.size());
m_Loaded = true;
}
void MonsterSpawnerMng::procRun() {
for (size_t i = 0; i < m_WorkPool.size(); i++) {
if (m_WorkPool[i].isEmpty()) {
continue;
}
if (m_WorkPool[i].isExpired()) {
LogAddTD("[MonsterSpawnerMng] [%s] spot duration is expired, slot cleared",
m_WorkPool[i].ownerName.c_str());
m_WorkPool[i].clearSlot();
}
}
}
void MonsterSpawnerMng::procRegen(short MonsterIndex) {
gObj[MonsterIndex].X = gObj[MonsterIndex].StartX;
gObj[MonsterIndex].Y = gObj[MonsterIndex].StartY;
gObj[MonsterIndex].MTX = gObj[MonsterIndex].X;
gObj[MonsterIndex].MTY = gObj[MonsterIndex].Y;
gObj[MonsterIndex].m_ActState.Emotion = 1;
gObj[MonsterIndex].m_ActState.EmotionCount = 1;
}
bool MonsterSpawnerMng::procCreate(short UserIndex, int ItemCode) {
MonsterSpawnerItemInfo* tmpItemInfo = getItemInfo(ItemCode);
if (tmpItemInfo == NULL) {
return false;
}
int tmpSlotIndex = getEmptySlot();
if (tmpSlotIndex == -1) {
MonsterSpawnerWorkNode newNode;
newNode.setSlot(UserIndex, tmpItemInfo);
m_WorkPool.push_back(newNode);
} else {
m_WorkPool[tmpSlotIndex].setSlot(UserIndex, tmpItemInfo);
}
LogAddTD("[MonsterSpawnerMng] [%s][%s] spot has been created (monster: %d, count: %d, duration: %d, map: %d (%d:%d))",
gObj[UserIndex].AccountID, gObj[UserIndex].Name, tmpItemInfo->spawnMonsterId, tmpItemInfo->spawnMonsterCount,
tmpItemInfo->spawnDuration, gObj[UserIndex].MapNumber, gObj[UserIndex].X, gObj[UserIndex].Y);
return true;
}
bool MonsterSpawnerMng::isPrivate(short UserIndex, short MonsterIndex) {
LPOBJ tmpAttacker = &gObj[UserIndex];
LPOBJ tmpMonster = &gObj[MonsterIndex];
LPOBJ tmpOwner = NULL;
MonsterSpawnerWorkNode* tmpNode = NULL;
MonsterSpawnerItemInfo* tmpItem = NULL;
for (size_t i = 0; i < m_WorkPool.size(); i++) { // select node
if (m_WorkPool[i].isMonster(MonsterIndex)) {
tmpNode = &m_WorkPool[i];
break;
}
}
if (tmpNode == NULL) { // node not founded, spot unblocked
return false;
}
if (tmpNode->isOwner(tmpAttacker->Name)) { // owner
return false;
}
tmpItem = getItemInfo(tmpNode->itemCode);
if (tmpItem == NULL) { // rules for node not founded, spot unblocked
return false;
}
if (!tmpItem->isPrivate) { // spot not privated by rules
return false;
}
for (int i = OBJ_STARTUSERINDEX; i < OBJMAX; i++) { // select live owner
if (gObj[i].Connected >= PLAYER_PLAYING) {
if (tmpNode->isOwner(gObj[i].Name)) {
tmpOwner = &gObj[i];
break;
}
}
}
if (tmpOwner == NULL) { // spot have owner, but owner is offline, cant check rules - block by rules
MsgOutput(UserIndex, "Monster is privated by %s", tmpNode->ownerName.c_str());
return true;
}
if (tmpItem->isPrivateParty && tmpOwner->PartyNumber >= 0) { // spot is not privated for party members
if (tmpOwner->PartyNumber == tmpAttacker->PartyNumber) {
return false;
}
}
if (tmpItem->isPrivateGuild && tmpOwner->GuildNumber > 0) { // spot is not privated for guild members
if (tmpOwner->GuildNumber == tmpAttacker->GuildNumber) {
return false;
}
}
MsgOutput(UserIndex, "Monster is privated by %s", tmpNode->ownerName.c_str());
return true;
}
bool MonsterSpawnerMng::isEventMonster(short MonsterIndex) {
for (size_t i = 0; i < m_WorkPool.size(); i++) {
if (m_WorkPool[i].isMonster(MonsterIndex)) {
return true;
}
}
return false;
}
bool MonsterSpawnerMng::isKeyItem(int ItemCode) {
if (getItemInfo(ItemCode) != NULL) {
return true;
}
return false;
}
int MonsterSpawnerMng::getEmptySlot() {
for (size_t i = 0; i < m_WorkPool.size(); i++) {
if (m_WorkPool[i].isEmpty()) {
return i;
}
}
return -1;
}
MonsterSpawnerItemInfo* MonsterSpawnerMng::getItemInfo(int ItemCode) {
if (!m_Loaded) {
return NULL;
}
for (size_t i = 0; i < m_ItemData.size(); i++) {
if (ITEMGET(m_ItemData[i].itemCategory, m_ItemData[i].itemIndex) == ItemCode) {
return &m_ItemData[i];
}
}
return NULL;
}
MonsterSpawner.h
PHP Code:
#pragma once
// import
#include "user.h"
// data
struct MonsterSpawnerItemInfo {
short itemIndex;
short itemCategory;
short spawnMonsterId;
short spawnMonsterCount;
short spawnDuration;
bool isPrivate;
bool isPrivateParty;
bool isPrivateGuild;
};
struct MonsterSpawnerWorkNode { // maybe better use class & ptr instance...
MonsterSpawnerWorkNode() {
ownerName.reserve(MAX_ACCOUNT_LEN + 1);
monsterPool.clear();
itemCode = -1;
tickEnd = 0;
}
void setSlot(short UserIndex, MonsterSpawnerItemInfo* itemInfo) {
if (UserIndex < 0 || UserIndex > OBJMAX) {
return;
}
LPOBJ tmpUser = &gObj[UserIndex];
if (tmpUser == NULL) {
return;
}
ownerName.assign(tmpUser->Name);
itemCode = ITEMGET(itemInfo->itemCategory, itemInfo->itemIndex);
tickEnd = GetTickCount() + (itemInfo->spawnDuration * 60 * 1000);
setSpot(UserIndex, itemInfo);
}
void clearSlot() {
ownerName.assign("");
itemCode = -1;
tickEnd = 0;
clearSpot();
monsterPool.clear();
}
void setSpot(short UserIndex, MonsterSpawnerItemInfo* itemInfo) {
if (UserIndex < 0 || UserIndex > OBJMAX) {
return;
}
LPOBJ tmpUser = &gObj[UserIndex];
if (tmpUser == NULL) {
return;
}
for (int i = 0; i < itemInfo->spawnMonsterCount; i++) {
int tmpMonsterIndex = gObjAddMonster(tmpUser->MapNumber);
if (tmpMonsterIndex < 0) {
return;
}
gObj[tmpMonsterIndex].m_PosNum = -1;
gObj[tmpMonsterIndex].X = tmpUser->X + rand() % 2;
gObj[tmpMonsterIndex].Y = tmpUser->Y + rand() % 2;
gObj[tmpMonsterIndex].MapNumber = tmpUser->MapNumber;
gObj[tmpMonsterIndex].TX = gObj[tmpMonsterIndex].X;
gObj[tmpMonsterIndex].TY = gObj[tmpMonsterIndex].Y;
gObj[tmpMonsterIndex].m_OldX = gObj[tmpMonsterIndex].X;
gObj[tmpMonsterIndex].m_OldY = gObj[tmpMonsterIndex].Y;
gObj[tmpMonsterIndex].StartX = gObj[tmpMonsterIndex].X;
gObj[tmpMonsterIndex].StartY = gObj[tmpMonsterIndex].Y;
gObj[tmpMonsterIndex].m_ActState.Emotion = 1;
gObj[tmpMonsterIndex].m_ActState.EmotionCount = 15;
gObj[tmpMonsterIndex].Dir = rand() % 8;
gObjSetMonster(tmpMonsterIndex, itemInfo->spawnMonsterId);
monsterPool.push_back(tmpMonsterIndex);
}
}
void clearSpot() {
for (size_t i = 0; i < monsterPool.size(); i++) {
gObjViewportListProtocolDestroy(&gObj[monsterPool[i]]);
gObjViewportClose(&gObj[monsterPool[i]]);
gObjDel(monsterPool[i]);
gObj[monsterPool[i]].Live = 0;
gObj[monsterPool[i]].DieRegen = 1;
}
}
bool isOwner(char* OwnerName) {
if (ownerName.compare(OwnerName) == NULL) {
return true;
}
return false;
}
bool isMonster(short MonsterIndex) {
for (size_t i = 0; i < monsterPool.size(); i++) {
if (monsterPool[i] == MonsterIndex) {
return true;
}
}
return false;
}
bool isEmpty() {
if (isOwner("")) {
return true;
}
return false;
}
bool isExpired() {
if (GetTickCount() >= tickEnd) {
return true;
}
return false;
}
std::string ownerName;
std::vector<short> monsterPool;
int itemCode;
DWORD tickEnd;
};
// monster spawner by item drop impletation
class MonsterSpawnerMng {
public:
MonsterSpawnerMng();
~MonsterSpawnerMng();
void Load();
void Init();
void Read(const char* File);
void procRun();
void procRegen(short MonsterIndex);
bool procCreate(short UserIndex, int ItemCode);
bool isPrivate(short UserIndex, short MonsterIndex);
bool isEventMonster(short MonsterIndex);
bool isKeyItem(int ItemCode);
int getEmptySlot();
MonsterSpawnerItemInfo* getItemInfo(int ItemCode);
// singleton
static MonsterSpawnerMng* getInstance() {
if (m_Instance == NULL) {
m_Instance = new MonsterSpawnerMng();
}
return m_Instance;
}
private:
static MonsterSpawnerMng* m_Instance;
std::vector<MonsterSpawnerWorkNode> m_WorkPool;
std::vector<MonsterSpawnerItemInfo> m_ItemData;
private:
bool m_Loaded;
};
re: [Release] IGCN Season 9.5 (src-x9.5 9.5.1.15) SRC (April/2016)
Quote:
Originally Posted by
or30n
Hello guyz, in these files what about agility bug for all classes? Gen system is working fine?
Gen worked fine for me. Agility bug doesn't exist when i worked with the files.
re: [Release] IGCN Season 9.5 (src-x9.5 9.5.1.15) SRC (April/2016)
Hi guys, have you ever experience rage fighters loosing items in the inventory or equipped items after some couple of time?
re: [Release] IGCN Season 9.5 (src-x9.5 9.5.1.15) SRC (April/2016)
Quote:
Originally Posted by
soooom
Hi guys, have you ever experience rage fighters loosing items in the inventory or equipped items after some couple of time?
I did. So it was not just me. XD. But not all characters, rf only and i experienced only 1 character. Well what i did is, check the item logs for the player to know what items got lost.. Then i deleted and recreated the character again put back his lost items (actually i made him a trade :D).
re: [Release] IGCN Season 9.5 (src-x9.5 9.5.1.15) SRC (April/2016)
Quote:
Originally Posted by
soooom
Hi guys, have you ever experience rage fighters loosing items in the inventory or equipped items after some couple of time?
Maybe someone can help to debug and fix problem? I can pay, not much becouse server dont have donate it's my hobby.
Becouse bug is very critical all my RF loosing items. If I don't fixed it I should close my server and I really dont want it :(
I noticed that in Database - Character table all RF characters loosing varbinary columns(have NULL). Quest,Inventory,Skills,MuBot etc.
If I open any RF character who loosed items IGC.EssentialTools item editor its crash.
I need to change Quest from NULL to NewCharacter. Then I can start edit with IGC.EssentialTools item editor. <- Maybe this can help.
Also when you create RF first time Quest,Skills columns = NULL <- Maybe this can help.
GameServer have no error logs.
DataServer have no error logs.
re: [Release] IGCN Season 9.5 (src-x9.5 9.5.1.15) SRC (April/2016)
does someone know how to record users MAC Address on database?????
re: [Release] IGCN Season 9.5 (src-x9.5 9.5.1.15) SRC (April/2016)
Hi guys, i have a problem ... i can`t find in files to edit Skill DMG % from BK .. i have on full stats 6707% skill dmg and the dmg of BK,DL and RF is gigantic ... you can see what i am talking about in the print below : https://i.imgur.com/tluOI58.jpg Thank you and please give me an answer ...
re: [Release] IGCN Season 9.5 (src-x9.5 9.5.1.15) SRC (April/2016)
Quote:
Originally Posted by
MaxMuON
Hi guys, i have a problem ... i can`t find in files to edit Skill DMG % from BK .. i have on full stats 6707% skill dmg and the dmg of BK,DL and RF is gigantic ... you can see what i am talking about in the print below :
https://i.imgur.com/tluOI58.jpg Thank you and please give me an answer ...
You need to balance skills, via LUA scripting, reformulate them to give "lower dmg".....its not an easy task tho.
Enviado desde mi SM-G531M mediante Tapatalk
re: [Release] IGCN Season 9.5 (src-x9.5 9.5.1.15) SRC (April/2016)
after multiple tries, changing IGC.DLLs, trying different CSs, disabling DLL check on login (allow login invalid dll = 1)
I still cannot login to a server that's hosted on LAN with all LAN IPs configured.
I get immediate DC after main.exe loads.
Dummy 1.02Q server setup locally works fine.
I don't know what to do anymore
What I tried:
Ashlay's EXEs
Ashlay's DLL
Stock EXEs
Stock DLLs
Repacked Bins
HEX Edit of Main and IGC.Dll
enabling loopback
gameserver.ini (disable DLL Check or smtg along those lines)
FILES USED:
Everything that was provided in this thread
Originals (with AUTH system disabled)
and ASHLAY modified files
EDIT:
hosted on
server 2012 R2 x64
SQL 2012 Enterprise
re: [Release] IGCN Season 9.5 (src-x9.5 9.5.1.15) SRC (April/2016)
Quote:
Originally Posted by
ReaperMuAdmin
after multiple tries, changing IGC.DLLs, trying different CSs, disabling DLL check on login (allow login invalid dll = 1)
I still cannot login to a server that's hosted on LAN with all LAN IPs configured.
I get immediate DC after main.exe loads.
Dummy 1.02Q server setup locally works fine.
I don't know what to do anymore
What I tried:
Ashlay's EXEs
Ashlay's DLL
Stock EXEs
Stock DLLs
Repacked Bins
HEX Edit of Main and IGC.Dll
enabling loopback
gameserver.ini (disable DLL Check or smtg along those lines)
FILES USED:
Everything that was provided in this thread
Originals (with AUTH system disabled)
and ASHLAY modified files
EDIT:
hosted on
server 2012 R2 x64
SQL 2012 Enterprise
what is your ip, i'll make you igc dll.